#ifndef __ITERRAIN_SERIALIZER_HPP__
#define __ITERRAIN_SERIALIZER_HPP__

#include "TerrainChunk.h"

namespace PocketSurvival
{
    class ITerrainSerializer
    {
    public:
        /***********************************************************************************************************
         * @brief 向 地图区域 中读取 区块 的数据，读取前应该先赋值 区块 中的m_Coords数据
         * @param terrainChunk 区块对象
         * @return true 加载成功 | false 加载失败
        ***********************************************************************************************************/
        virtual bool loadChunk(TerrainChunk* ) = 0;

        /***********************************************************************************************************
         * @brief 将 区块 保存进对应 地图区域 内
         * @param terrainChunk 区块对象
         * @return true 保存成功 | false 保存失败
        ***********************************************************************************************************/
        virtual bool saveChunk(TerrainChunk* ) = 0;

        /***********************************************************************************************************
         * @brief 建所有在哈希表中的 地图区域 保存进本地的map文件中，保存后不会清理哈希表中的 地图区域
        ***********************************************************************************************************/
        virtual void saveAllRegion() = 0;

        /***********************************************************************************************************
         * @brief 回收所有在哈希表中的 地图区域，并将地图区域放进可用的 地图区域 队列中，注意，该函数不会对 地图区域 进行保存
        ***********************************************************************************************************/
        virtual void releaseAllRegion() = 0;

        /***********************************************************************************************************
         * @brief 保存和回收所有地图区域
        ***********************************************************************************************************/
        virtual void saveAndReleaseAllRegion() = 0;
    };
} // namespace PocketSurvival

#endif
